
class Person {
    static void prinft_some_thing() {
        System.out.println("prinft_some_thing is runing");
    }

}

public class Test {
    public static void main(String[] args) {
        // 1、直接调用class的static方法
        Person.prinft_some_thing();
        // 不能直接调用
        // var fn = Person::prinft_some_thing;
        // fn();

        // 2、通过内置Runable接口调用
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                Person.prinft_some_thing();
            }
        };
        r1.run();
        // 3、通过Lambda构造Runnable调用
        Runnable r2 = () -> Person.prinft_some_thing();
        r2.run();

        // 4、通过Runnable+Lambda传递方法
        Runnable r3 = () -> Person.prinft_some_thing();
        Thread t1 = new Thread(r3);
        t1.start();

        // 5、直接传递
        Thread t2 = new Thread(Person::prinft_some_thing);
        t2.start();

        // 6、lambda实现自定义接口： Lambda 就是函数式接口的匿名实现类，只是不写 new 和 implements
        SomeInterFace c1 = (x) -> {
            System.out.println(x);
        };
        c1.foo(1);
        // 7、“引用左边必须是类或对象，不能带链式点号
        SomeInterFace c2 = System.out::println;
        c2.foo(1);
    }
}

interface SomeInterFace {
    void foo(Object x);
}